初识pandas(2)Series 常用属性和方法DataFrame数据的获取和遍历 您所在的位置:网站首页 python dataframe 获取index 初识pandas(2)Series 常用属性和方法DataFrame数据的获取和遍历

初识pandas(2)Series 常用属性和方法DataFrame数据的获取和遍历

2024-02-06 13:44| 来源: 网络整理| 查看: 265

Series 常用属性和方法 表格数据中的每一行或者每一列的数据结构都是Series, 它可以看成一维的表格数据, 它可以属于DataFrame的一部分也可以作为独立的数据结构存在 获取数据的值, 使用 values方法获取索引的值, 使用 index 方法获取每对索引的值, 使用 items 方法

values、index、items返回的对象分别是List、Index、Zip类型的数据,为了方便我们使用和观察数据,可以使用series.index.tolist()和list(series.items())方法转化成List类型

from pandas import Series emp = ['01', '02', '03', '04', '05', '06'] name = ['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'] # 构建数据 series = Series(data=name, index=emp) # 获取数据的值, 使用 values方法 print("数据的值: ",series.values) # 获取索引的值, 使用 index 方法 print("索引的值原始值: ", series.index) print("索引的值转换后: ", list(series.index)) # 获取每对索引的值, 使用 items 方法 print("每对索引和值原始值: ", series.items) print("每对索引和值转换后: ", list(series.items())) 数据的值: ['小乔' '孙策' '刘备' '赵云' '哪吒' '张飞'] 索引的值原始值: Index(['01', '02', '03', '04', '05', '06'], dtype='object') 索引的值转换后: ['01', '02', '03', '04', '05', '06'] 每对索引和值原始值: 每对索引和值转换后: [('01', '小乔'), ('02', '孙策'), ('03', '刘备'), ('04', '赵云'), ('05', '哪吒'), ('06', '张飞')] Series 就像将索引值暴露在外面的list, 在获取数据的时候可以通过索引值来进行单个数据的访问, 也支持切片选择多个数据 获取数据格式— 对象名[]获取多个不连续数据时是双层括号— 对象名[[]]使用切片时使用的是: 对象名['下标':'下标'] from pandas import Series emp = ['01', '02', '03', '04', '05', '06'] name = ['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'] # 构建数据 series = Series(data=name, index=emp) # 使用索引值获取单个数据 print('单个数据: ', series['01']) # 使用索引值获取多个不连续的数据 print('索引下标: ',series[['02','04']]) # 使用切片获取连续的数据, 这个01:02, 是使用索引为下标 # 如果下标为['a','b','c','d','e','f'],那么此时的切片操作应为series['a':'d'] print('索引切片: ',series['01':'04']) 单个数据: 小乔 索引下标: 02 孙策 04 赵云 dtype: object 索引切片: 01 小乔 02 孙策 03 刘备 04 赵云 dtype: object 这样使用也可以,自定义的index值被叫做索引下标,没有设置index值时会有一个默认的值叫做位置下标,这时和操作列表是一样的 from pandas import Series emp = ['01', '02', '03', '04', '05', '06'] name = ['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'] # 构建数据 series = Series(data=name, index=emp) # 获取单个数据 print(series[0]) # 获取多个不连续的数据 print('位置下标',series[[1,3]]) # 使用切片获取连续的数据 print('位置切片',series[0:3]) 小乔 位置下标 02 孙策 04 赵云 dtype: object 位置切片 01 小乔 02 孙策 03 刘备 dtype: object 通过遍历也可以获取数据 利用循环来遍历Series。我们可以直接遍历Series的值 # 遍历并拿到data数据 for value in series: print(value) 通过keys(),遍历Series的索引 # 遍历并拿到index数据 for value in series.keys(): print(value) 通过items(),遍历Series的每对索引和数据 # 遍历并拿到每对索引和数据 for value in series.items(): print(value)

代码示例

from pandas import Series emp = ['01', '02', '03', '04', '05', '06'] name = ['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'] # 构建数据 series = Series(data=name, index=emp) # 遍历并拿到每对索引和数据 for value in series.items(): print(value) ('01', '小乔') ('02', '孙策') ('03', '刘备') ('04', '赵云') ('05', '哪吒') ('06', '张飞') DataFrame数据的获取和遍历

数据的维度是一维还是二维的我们可以使用ndim查看,数据的行数和列数shape,以及行列的索引值index、columns

import pandas as pd df_dict = { 'name':['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'], 'age':['19','20','19','22', '21','23'], 'weight':['50','55','60','80', '60','80'] } df = pd.DataFrame(data=df_dict,index=['01', '02', '03', '04', '05', '06']) print(df) # 获取行数和列数 print("行数和列数: ",df.shape) # 获取行索引 print('行索引: ',df.index.tolist()) # 获取列索引 print('列索引: ',df.columns.tolist()) # 获取数据的维度 print("维度: ", df.ndim) print('*'*50) '''如果数据量太大直接打印df会比较耗时, 所以可以使用head()获取前几行、使用tail()获取后几行, 这两个方法都有默认值, 默认值为5''' # 获取前两条 # df.head(2) # 获取后两条 df.tail(2) name age weight 01 小乔 19 50 02 孙策 20 55 03 刘备 19 60 04 赵云 22 80 05 哪吒 21 60 06 张飞 23 80 行数和列数: (6, 3) 行索引: ['01', '02', '03', '04', '05', '06'] 列索引: ['name', 'age', 'weight'] 维度: 2 ************************************************** nameageweight05哪吒216006张飞2380 获取行数据 import pandas as pd df_dict = { 'name':['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'], 'age':['19','20','19','22', '21','23'], 'weight':['50','55','60','80', '60','80'] } df = pd.DataFrame(data=df_dict,index=['01', '02', '03', '04', '05', '06']) # 通过位置索引切片获取一行 print(df[0:1]) print('*'*50) # 通过位置索引切片获取多行 print(df[1:3]) print('*'*50) # 获取多行里面的某几列 print(df[1:3][['name','age']]) print('*'*50) # 获取DataFrame的列 print(df['name']) print('*'*50) # 如果获取多个列 print(df[['name','age']]) """ df[]不支持直接输入标签索引获取行数据,例如:df['001'] 这种方式可以获取一列数据,列如:df['name'] 如果想获取多行里面的某几列可写成:df[行][列],例如:df[1:3][['name','age']],将列索引值放到同一个列表中,再将列表放到第二个方括号中 """ name age weight 01 小乔 19 50 ************************************************** name age weight 02 孙策 20 55 03 刘备 19 60 ************************************************** name age 02 孙策 20 03 刘备 19 ************************************************** 01 小乔 02 孙策 03 刘备 04 赵云 05 哪吒 06 张飞 Name: name, dtype: object ************************************************** name age 01 小乔 19 02 孙策 20 03 刘备 19 04 赵云 22 05 哪吒 21 06 张飞 23 loc()

通过行标签索引筛选loc[],通过行位置索引筛选iloc[] df.loc[] 通过标签索引获取行数据,它的语法结构是这样的:df.loc[[行],[列]],方括号中用逗号分隔,左侧是行、右侧是列。千万注意:如果行或者列使用切片的时候,要把方括号去掉,列df.loc[‘001’:‘003’,‘name’:‘weight’]

import pandas as pd df_dict = { 'name':['小乔', '孙策', '刘备', '赵云', '哪吒', '张飞'], 'age':['19','20','19','22', '21','23'], 'weight':['50','55','60','80', '60','80'] } df = pd.DataFrame(data=df_dict,index=['01', '02', '03', '04', '05', '06']) # 获取某一行某一列的数据 print(df.loc['01','name']) # 某一行多列的数据 print(df.loc['01',['name','weight']]) # 一行所有列 print(df.loc['01',:]) # 选择间隔的多行多列 print(df.loc[['01','03'],['name','weight']]) # 选择连续的多行和间隔的多列 print(df.loc['01':'03','name':'weight']) 小乔 name 小乔 weight 50 Name: 01, dtype: object name 小乔 age 19 weight 50 Name: 01, dtype: object name weight 01 小乔 50 03 刘备 60 name age weight 01 小乔 19 50 02 孙策 20 55 03 刘备 19 60 iloc()

df.iloc[] 通过位置索引获取行数据,他的操作和loc[]操作是一样的,只要将标签索引改成位置索引就好了

# 取一行 print(df.iloc[1]) # 取连续多行 print(df.iloc[0:2]) # 取间断的多行 print(df.iloc[[0,2],:]) # 取某一列 print(df.iloc[:,1]) # 某一个值 print(df.iloc[1,0])

loc和iloc的切片操作在是否包含切片终点的数据有差异。loc[‘01’:‘03’]的结果中包含行索引003对应的行。iloc[0:2] 结果中不包含序号为2的数据,切片终点对应的数据不在筛选结果中

iterrows() 按行遍历

按行遍历,将DataFrame的每一行转化为(index, Series)对。index为行索引值,Series为该行对应的数据

for index,row_data in df.iterrows(): print(index,row_data) iteritems() 按列遍历

按列遍历,将DataFrame的每一列转化为(column, Series)对。column为列索引的值,Series为该列对应的数据

for col,col_data in df.iteritems(): print(col)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有